_require local "../../../../ml-yacc-lib.smi"
_require local "../../../data/symbols/main/Symbol.smi"
_require local "../../../data/symbols/main/RecordLabel.smi"

_require local "../../../compilerIRs/absyn/main/RequirePath.smi"
_require local "../../../compilerIRs/absyn/main/Absyn.smi"

_require "../../../../basis.smi"
_require "../../../data/symbols/main/Loc.smi"
_require "../../../compilerIRs/absyn/main/AbsynInterface.ppg.smi"

structure Interface =
struct
  structure Parser =
  struct
    type token (= boxed)
    type stream (= ref)
    type result = AbsynInterface.itop
    type pos = Loc.pos
    type arg = unit
    exception ParseError
    val makeStream : {lexer:unit -> token} -> stream
    val consStream : token * stream -> stream
    val getStream : stream -> token * stream
    val sameToken : token * token -> bool
    val parse : {lookahead:int,
                 stream:stream,
                 error: (string * pos * pos -> unit),
                 arg: arg}
                -> result * stream
  end
  structure Tokens =
  struct
    type pos = Parser.pos
    type token = Parser.token
val WITHTYPE:  pos * pos -> token
val WHERE:  pos * pos -> token
val VAL:  pos * pos -> token
val USE':  pos * pos -> token
val TYVAR: (string) *  pos * pos -> token
val TYPE:  pos * pos -> token
val STRUCTURE:  pos * pos -> token
val STRUCT:  pos * pos -> token
val STRING: (string) *  pos * pos -> token
val SPECIAL: (string) *  pos * pos -> token
val SIGNATURE:  pos * pos -> token
val SIG:  pos * pos -> token
val SHARING:  pos * pos -> token
val SEMICOLON:  pos * pos -> token
val RPAREN:  pos * pos -> token
val RBRACKET:  pos * pos -> token
val RBRACE:  pos * pos -> token
val REQUIRE:  pos * pos -> token
val PERIODS:  pos * pos -> token
val PERIOD:  pos * pos -> token
val OPAQUE:  pos * pos -> token
val OP:  pos * pos -> token
val OF:  pos * pos -> token
val NONFIX:  pos * pos -> token
val LPAREN:  pos * pos -> token
val LOCAL:  pos * pos -> token
val LBRACKET:  pos * pos -> token
val LBRACE:  pos * pos -> token
val PREFIXEDLABEL: (string) *  pos * pos -> token
val INTLAB: (string) *  pos * pos -> token
val INT: ({ radix:StringCvt.radix,digits:string } ) *  pos * pos -> token
val INFIXR:  pos * pos -> token
val INFIX:  pos * pos -> token
val INCLUDE:  pos * pos -> token
val IN:  pos * pos -> token
val ALPHABETICID: (string) *  pos * pos -> token
val SYMBOLICID: (string) *  pos * pos -> token
val HASH:  pos * pos -> token
val FUNCTOR:  pos * pos -> token
val FUN:  pos * pos -> token
val FN:  pos * pos -> token
val EXCEPTION:  pos * pos -> token
val EQTYVAR: (string) *  pos * pos -> token
val EQTYPE:  pos * pos -> token
val EQ:  pos * pos -> token
val END:  pos * pos -> token
val DATATYPE:  pos * pos -> token
val DARROW:  pos * pos -> token
val COMMA:  pos * pos -> token
val COLON:  pos * pos -> token
val CHAR: (string) *  pos * pos -> token
val CASE:  pos * pos -> token
val BUILTIN:  pos * pos -> token
val BAR:  pos * pos -> token
val AT:  pos * pos -> token
val ASTERISK:  pos * pos -> token
val AS:  pos * pos -> token
val ARROW:  pos * pos -> token
val ANDALSO:  pos * pos -> token
val AND:  pos * pos -> token
val ABSTYPE:  pos * pos -> token
val EOF:  pos * pos -> token
  end
end
